STLINK开发工具链
STM32 Nucleo BoardsSTM32 Nucleo 64 boarder MB1136 User ManualMB1136 Schematic
01 STLINK开发工具
一、前言
这是从 NUCLEO 开发板上拆卸下来的 ST LINK模块。 下面给出构建 STM32单片机开发软硬件的具体过程。
![GM1707717205_1920_1080.MPG|_-2](https://img-blog.csdnimg.cn/direct/5cd28ebac3474eb79baf384d3511ef6c.png#pic_center)
二、定义接口
下面给出 ST LINK 模块的硬件配置。 首先, 将CN2接口上的两个跳线都去掉。 它就正式配置成 ST LINK。 它对外的 SWD 接口定义, 如下面表格给出。 将其中 GND, CLK, DIO 以及 NRST引出。 此外, ST LINK 还有一个虚拟串口, 通过它可以接收单片机发送的信息。 这是定义的六芯调试接口的功能。 根据前面介绍的端口定义, 这里给出了调试接口引线的连接关系。 利用这个硬件接口, 便可以与调试开发板进行连接了。
![GM1707717986_1920_1080.MPG|_-11](https://img-blog.csdnimg.cn/direct/3926f45c21c54f66999a234cd7f4da3a.png#pic_center)
使用六芯扁平电缆制作外部调试端口引线。 分成两个接头。 一个是四芯接口, 一个是两芯接口, 这里给出两个接口的焊接关系, 分别连接到 ST LINK 中的 SWD接口 和串口。
![GM1707718333_1920_1080.MPG|_-5](https://img-blog.csdnimg.cn/direct/3b2dea530c7945b693f38427e710bf58.png#pic_center)
将引线制作完毕之后, 安插在模块接口排针上, 使用热缩管进行固定, 用于后面开发板的调试。
![GM1707720699_1920_1080.MPG|_-2](https://img-blog.csdnimg.cn/direct/c5a9148b17c4475d94a58b57f60428b5.png#pic_center)
三、软件开发
使用 STLINK下载软件, 可以有以下三种方式, 第一种方式使用 STM32 Cube Programmer。 这个软件可以通过 STLINK, 串口以及USB对单片机软件进行更新。 同时, 它可以对单片机内部的一些寄存器进行配置。 功能非常强大。 第二个软件为 ST Link Utility。 它的界面非常简介。 而且下载流程不需要额外更多的操作。 ![](https://img-blog.csdnimg.cn/direct/6067aa90e05a44d2995a1e37d03f0ec8.png#pic_center)
第三种方法, 就是在 EWIAR 开发环境中, 直接配置调试器为 ST LINK, 应用 SWD接口进行调试。 在程序编译之后, 便可以进行下载调试。
![GM1707721244_1920_1080.MPG|_-2](https://img-blog.csdnimg.cn/direct/a19d7b5df7c044859ddcea6e01fd5768.png#pic_center)
在工程文件配置的时候, 需要正确的选择连接控制文件。 如果没有选择正确的连接控制文件, 就会使得生成的 HEX 文件对应的存储空间与 STM32 单片机不匹配, 造成后面无法进行下载和调试。 另外, 设置处理器件的时候, 需要选择正确的型号。 这样便于后面进行调试。 在使用 Cube MX 软件自动生成工程文件的过程中是, 选择 EWIAR 的版本为 8.0 .
![GM1707721549_1920_1080.MPG|_-3](https://img-blog.csdnimg.cn/direct/6025f43451e0438bafb531dd2ee7a22e.png#pic_center)
※ 总 结 ※
本文描述了基于 STLINK 构建STM32单片机开发的工具链过程. 基于这个方式, 可以非常方便进行单片机的软硬件开发. ![GM1707721666_1920_1080.MPG|_-2](https://img-blog.csdnimg.cn/direct/29b76cae4aa940b6a527893f0ca21efc.png#pic_right)
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# JFLASHLITE.PY -- by Dr. ZhuoQing 2024-02-07
#
# Note:
#============================================================
from headm import *
import pyautogui
import socket
#------------------------------------------------------------
UDP_HOST = '127.0.0.1'
UDP_PORT = 2244
UDP_BUFSIZE = 0x1000
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, UDP_BUFSIZE)
s.settimeout(0.2)
def ssend(data):
ADDR = (UDP_HOST, UDP_PORT)
if type(data) != str:
data = str(data)
data = bytes(data, 'gbk')
s.sendto(data, ADDR)
def srecv():
try:
data, ADDR = s.recvfrom(UDP_BUFSIZE)
except socket.timeout:
printf('Meter time out.')
data = ''
if len(data) > 0:
return data.decode('utf-8')
else: return ''
def sval():
ssend('MEMOS')
splitstr = srecv().split(' ')
data = []
for val in splitstr:
if len(val) > 0:
data.append(eval(val))
return data
#------------------------------------------------------------
rect = tspgetwindowrect("STM32 ST-LINK Utility")
if sum(rect) != 0:
pyautogui.click((rect[0]+rect[2])//2, rect[3]-100)
tspsendwindowkey("STM32 ST-LINK Utility", "o", control=1, noreturn=1)
time.sleep(.5)
tspsendwindowkey("打开", "n", alt=1,noreturn=1)
tspsendwindowkey("打开", "v", control=1,noreturn=1)
tspsendwindowkey("打开", "o", alt=1,noreturn=1)
time.sleep(1)
tspsendwindowkey("STM32 ST-LINK Utility", "p", control=1, noreturn=1)
time.sleep(.5)
rect = tspgetwindowrect("Download")
if sum(rect) == 0: exit()
pyautogui.click((rect[0]+rect[2])//2 - 35, rect[3]-30)
ssend('CLEAR')
rect = tspgetwindowrect("STM32 BOOTLOADER")
if sum(rect) != 0:
pyautogui.click((rect[0]+rect[2])//2, rect[1]+5)
tspfocuswindow("TEASOFT:3")
printf("\a")
exit()
#------------------------------------------------------------
rect = tspgetwindowrect("STM32CubeProgrammer")
if sum(rect) != 0:
pyautogui.click(rect[0]+450, rect[1]+375)
ssend('CLEAR')
for i in range(50):
time.sleep(.5)
rect = tspgetwindowrect("消息")
if sum(rect) != 0:
tspsendwindowkey("STM32CubeProgrammer", "\r")
for i in range(5):
time.sleep(.5)
rect = tspgetwindowrect("消息")
if sum(rect) != 0:
tspsendwindowkey("STM32CubeProgrammer", "\r")
for i in range(5):
time.sleep(.5)
rect = tspgetwindowrect("错误")
if sum(rect) != 0:
tspsendwindowkey("STM32CubeProgrammer", "\r")
tspfocuswindow("STM32 BOOTLOADER")
tspfocuswindow("TEASOFT:3")
printf("\a")
exit()
#------------------------------------------------------------
rect = tspgetwindowrect("SEGGER J-Flash")
clipboard.copy("")
printf("")
#------------------------------------------------------------
if len(sys.argv) > 1:
if sys.argv[1] == '*':
crect = tspgetwindowrect("STM32CubeMX")
if sum(crect) != 0:
pyautogui.click(crect[2] - 250, crect[1] + 95)
for i in range(20):
time.sleep(.5)
crect = tspgetwindowrect('Code Generation')
if sum(crect) != 0:
pyautogui.click(crect[2] - 100, crect[3] - 40)
break
crect = tspgetwindowrect('IAR Embedded Workbench')
if sum(crect) != 0:
pyautogui.click((crect[0]+crect[2])//2, crect[3]-95)
for i in range(20):
time.sleep(.5)
crect = tspgetwindowrect('IarIdePm')
if sum(crect) != 0:
pyautogui.click((crect[0]+crect[2])//2, crect[3] - 40)
break
printf("Wait busy.\a")
for i in range(50):
time.sleep(.1)
crect = tspgetwindowrect('Busy')
if sum(crect) != 0: break
printf("Wait finished.\a")
for i in range(50):
time.sleep(.1)
crect = tspgetwindowrect('Busy')
if sum(crect) == 0: break
printf("Rebuild all.\a")
tspsendwindowkey("IAR Embedded Workbench", "pm", alt=1, noreturn=1)
tspfocuswindow("TEASOFT:3")
printf('\a')
exit()
#------------------------------------------------------------
pyautogui.click((rect[0]+rect[2])//2, (rect[1]+rect[3])//2-35)
time.sleep(.5)
flag = 0
for i in range(6):
ssend("COPY")
time.sleep(.2)
ss = clipboard.paste()
if len(ss) > 5:
flag = 1
printf(ss)
break
if flag == 0:
# pyautogui.click(rect[2]-35, (rect[1]+rect[3])//2-80)
# time.sleep(1.25)
# pyautogui.click((rect[0]+rect[2])//2, (rect[1]+rect[3])//2-35)
# time.sleep(1.25)
pyautogui.click((rect[0]+rect[2])//2, (rect[1]+rect[3])//2-35)
for i in range(10):
ssend("COPY")
time.sleep(.2)
ss = clipboard.paste()
if len(ss) > 5:
printf(ss)
break
#------------------------------------------------------------
#rect = tspgetwindowrect("STM32 BOOTLOADER")
#pyautogui.click((rect[0]+rect[2])//2, (rect[1]+rect[3])//2-35)
tspfocuswindow("TEASOFT:3")
printf("\a")
#------------------------------------------------------------
# END OF FILE : JFLASHLITE.PY
#============================================================
■ 相关文献链接:
STM32 Nucleo Boards STM32 Nucleo 64 boarder MB1136 User Manual MB1136 Schematic
|